#ifndef __GND_APP_H__
#define __GND_APP_H__

#include <gtkmm/application.h>
#include <glibmm/ustring.h>
#include <string>
#include <glibmm/main.h>

#include "Global.h"

namespace Gnodroid 
{

    class ServiceManager;
    class ModuleManager;
    class Mainwin;
    class Service;

    /** 应用程序的app类
     */
    class App :
        public Gtk::Application
    {
    public:
        static Glib::RefPtr<App>
        create();

        static Glib::RefPtr<Glib::MainContext>
        getMainContext();

        static ServiceManager*
        getServiceManager();

        static ModuleManager*
        getModuleManager();

        static App*
        getCurrentApp();


        Mainwin*
        getMainwin();

        /*helper*/
        static Service*
        getService(ServiceId id);


    protected:
        /** 构造函数
         */
        App();

    private:
        static Glib::RefPtr<Glib::MainContext> sm_rpMainContext;    //主线程的Context
        static ServiceManager* sm_pServiceManager;                  //服务管理器
        static ModuleManager* sm_pModuleManager;                    //模块管理器
        static App* sm_pApp;                                        //应用实例

        Mainwin* m_pMainwin;                                        //应用主窗口

        /** 应用激活时的回调函数
         */
        void __onActivate();


    };
}


#endif
